package Thread;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 *
 *
 * AQS(AbstractQueuedSynchronizer)  （基于模板设计模式的抽象队列同步器）简称AQS,实现同步器的重量级基础组件，juc下面的Lock实现以及并发工具类就是通过AQS实现的。
 *
 *        构建锁或其他同步器的重量级框架，是整个JUC的基石，内置的FIFO（CLH队列，默认是单项列表，虚拟双向队列）队列来完成资源获取线程的排队工作。并用int变量表示持有锁的状态
 *
 *   1.)AQS是一个通过内置的FIFO双向队列来完成线程的排队工作
 *   2.)JDK中实现并发编程的核心，平时我们工作中经常用到的ReentrantLock，CountDownLatch等都是基于它来实现的。
 *   3.)AQS的设计是基于模板方法模式的。使用时候需要继承同步器并重写指定的方法，并且通常将子类推荐为定义同步组件的静态内部类，
 *     子类重写这些方法之后，AQS工作时使用的是提供的模板方法，在这些模板方法中调用子类重写的方法。其中子类可以重写的方法：
 *
 *
 *     总体介绍：
 *         AQS使用一个volatile的int类型成员变量来表示同步状态，通过内置的FIFO队列来完成资源获取的排队工作，将每条将要抢占资源的线程封装成一个Node节点来实现锁的分配，通过CAS完成对
 *         state值的修改。
 */
public class AQS_Study {

    Lock lock = new ReentrantLock(true);

    Condition condition = lock.newCondition();

}
